#pragma once
#include <string>
#include <iostream>
using namespace std;
class Dog
{
private:
	string name;
public:
	Dog();
	//explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).
	//如果不加explicit关键字， Dog dog2 = "旺财" 默认就会调用对应的构造函数创建对象（如果重载了=操作符,那么到底是该创建对象还是该执行=操作 就会出现冲突）
	//入explicit关键字,Dog dog2 = "旺财" 这种写法不会调用构造函数创建对象(防止操作符重载时和对象的创建冲突)
	explicit Dog(string name);
	//拷贝构造函数,防止函数内部修改dog,加一个const
	Dog(const Dog &dog);
	~Dog();
	void set_name(string name);
	//后面跟const(只能用在成员函数,不能用在静态成员或者非成员函数)表示函数内部不能修改成员变量,因为隐含了对this指针的const引用
	string get_name()const;
};

